import axios from 'axios';
import { ElMessage } from 'element-plus';

const http = axios.create();

// 切换请求路径
if (process.env.NODE_ENV == 'development') {
  // 开发环境
  http.defaults.baseURL = 'http://localhost:3000/';
} else if (process.env.NODE_ENV == 'production') {
  // 生产环境
  http.defaults.baseURL = 'xx';
}

// 设置 post 的请求头
http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

// 设置请求时间
http.defaults.timeout = 3000;

// 请求拦截器
http.interceptors.request.use(config => {
  // 设置请求头
  config.headers.Authorization = 'Bearer token';
  return config
}, err => {
  console.log({
    text: '请求发生错误',
    content: err
  })
});

// 响应拦截器
http.interceptors.response.use(config => {

  return config;

}, err => {
  // 统一的提示
  if(err.response.data.message) {
    // 获取错误信息
    const message = err.response.data.message;

    // 使用 ui框架 的提示信息，进行提示
    ElMessage.error(message);
  }
  
  // 统一的处理
  // 对后端的状态码进行判断，然后抛出一系列的错误信息
  // 判断，如果错误信息 err 中，包含 状态码，就进行下一步
  if(err.response.status) {
    // 获取状态码
    const status = err.response.status;

    switch (status) {
      case 401:       // 未登录，跳转到登录页面
        // router.push('/login');
      break;
      case 403:
        console.log('登录过期，请重新登录');
        // 清除本地 token，跳转到 登录页面。
      break;
      case 404:
          ElMessage.error('网络请求失败');
          // 跳转到错误的页面
      break;
      default: 
        // 其他错误。
    }
  }

  return Promise.reject(err);
})


export default http;